﻿/**
 * @file singletont.h
 * @author huangxb
 * @email 18228033207@163.com
 * @date 2024.04.04
 * @license MIT License
 * @brief 单例模板类.
 *
 * @htmlonly
 * <span style="font-weight: bold">History</span>
 * @endhtmlonly
 * Version|Auther|Date|Describe
 * ------|----|------|--------
 * V1.0|huangxb|2024.04.04|创建，使用局部静态对象实现单例
 */

#ifndef CSINGLETONT_H
#define CSINGLETONT_H

/** @brief 单例模板类. */
template<typename T>
class CSingleTonT
{
public:
    /**
     * @brief 获取对象的单例对象.
     * @return 对象指针
     */
    static T* GetInstance()
    {
        static T _instance;
        return &_instance;
    }

protected:
    /** @brief 私有构造函数. */
    CSingleTonT() = default;
    /** @brief 虚析构函数. */
    virtual ~CSingleTonT() = default;
    /** @brief 禁用拷贝构造函数. */
    CSingleTonT(const CSingleTonT& other) = delete;
    /** @brief 禁用移动构造函数. */
    CSingleTonT(CSingleTonT&& other) = delete;
    /** @brief 禁用拷贝赋值函数. */
    CSingleTonT& operator=(const CSingleTonT& other) = delete;
    /** @brief 禁用移动赋值函数. */
    CSingleTonT& operator=(CSingleTonT&& other) = delete;
};

#endif // CSINGLETONT_H
